A database system may include data that is organized in various tables. Each table typically includes one or more rows (also known as tuples or records) that include a set of related data (e.g. related to a single entity). The data for each row may be arranged in a series of columns or fields, wherein each column includes a particular type of data (e.g. type of characteristic of an entity).
A table may contain data that is related to data in another table. For example, in a first table each row may represent an individual item (e.g. person, object, or event). In a second table, each row may represent a classification group (e.g. organization to which person belongs, places where objects may be located, time periods where events may occur). Tables of a database may be related to one another. For example, a column of the first table may associate each individual item represented there by a reference to one of the classification groups in the second table.
A query to the database may retrieve data that is related in a defined manner from different tables of the database. For example, a query may be expressed in SQL (Structured Query Language) or in another form. A query may be represented as a joining of the tables that are addressed by the query. For example, two tables may be joined by selecting a row of each table that satisfies a criterion (e.g. a particular column value in the row) to form a row in a joined table. In the above example, joining the first and second tables may result, e.g., in a joined table in which a row includes a characteristic of an item from the first table together with a characteristic of a group with which that item is associated. In the case of a complex join operation (e.g. where several tables are joined in a sequence of individual join operations) the join operation, and thus the query, may be optimized by modifying an order in which the various individual join operations are executed.